﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.ComponentModel;

namespace Mengsk.ERP.Orders
{
    public class Order
    {
        /// <summary>
        /// 获取或者设置一个值,以指示ERP系统为订单生的GUID
        /// </summary>
        public Guid ERPID { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示订单所属于的店铺
        /// </summary>
        public Shop Shop { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示订单的编号
        /// </summary>
        public string POPID { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示订单的类型
        /// </summary>
        public OrderType Type { get; set; }

        public OrderSource Source { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示订单的状态
        /// </summary>
        public string State { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示订单的标记颜色
        /// </summary>
        public OrderFlag Flag { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示订单总金额
        /// </summary>
        public double Money { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示付款类型
        /// </summary>
        public OrderPayType PayType { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示订单创建时间
        /// </summary>
        public DateTime CreateTime { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示付款时间
        /// </summary>
        public DateTime PayTime { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示标记发货时间
        /// </summary>
        public DateTime DeliveryTime { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示客户接收时间
        /// </summary>
        public DateTime ReciveTime { get; set; }

        /// <summary>
        /// 获取或者设置一个值，以指示返款时间
        /// </summary>
        public DateTime ReciveFeeTime { get; set; }

        /// <summary>
        /// 获取或者设置一个值，以指示预约的编号
        /// </summary>
        public string PPCOD { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示物流公司
        /// </summary>
        public string DeliveryCompany { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示物流订单编号
        /// </summary>
        public string DeliveryNumber { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示客户在平台的ID，如QQ，
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示客户在平台的昵称
        /// </summary>
        public string NickName { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示客户的真实名称
        /// </summary>
        public string RealName { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示客户的手机号码
        /// </summary>
        public string PhoneMobile { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示客户的座机号码
        /// </summary>
        public string Phone { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示客户当时的收货地址
        /// </summary>
        public string Address { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示客户的备注
        /// </summary>
        public string BuyerComment { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示买家的备注
        /// </summary>
        public string SellerComment { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示订单的Web详情连接
        /// </summary>
        public string DetailLink { get; set; }

        public DateTime LastUpdateTimeErp { get; set; }

        public DateTime LastUpdateTimePop { get; set; }

        public string LastUpdateUser { get; set; }

        /// <summary>
        /// 获取或者设置一个值,以指示ERP系统使用的备注
        /// </summary>
        public string Comment { get; set; }

        public List<OrderItem> Items { get; private set; }

        public Order()
        {
            this.Items = new List<OrderItem>();
        }

        public override bool Equals(object obj)
        {
            Order other = obj as Order;
            if (other == null)
            {
                return false;
            }
            return this.Shop == other.Shop && this.POPID == other.POPID;
        }

        public override int GetHashCode()
        {
            return base.GetHashCode();
        }
    }
}
